home *** CD-ROM | disk | FTP | other *** search
- UNIT startup; {$project vt }
- { Wertet die Programmstartargumente für VideoText aus }
-
- INTERFACE; FROM vt USES jobs;
-
- PROCEDURE get_args;
-
- { ---------------------------------------------------------------------- }
-
- IMPLEMENTATION;
-
- {$opt q,s+,i+ } { keine Laufzeitprüfungen außer Stack und Feldindizes }
- {$incl "workbench/startup.h", "icon.lib", "dos.lib" }
-
- PROCEDURE get_args;
- { wertet CLI- oder WorkBench-Argumente aus }
- { ToolTypes: CLI-Parameter: }
- { PALETTE=<rgb>,<rgb>,... -p<rgb>,<rgb>,... }
- { FILE=<output name> -f=<output name> }
- { ICONPATH=<pathname> -i=<pathname> }
- { EDITOR=<dos command> -e=<dos command> }
- { CONFIGPATH=<pathname> -c=<pathname> }
- { MAXWAIT=<seconds> -w<seconds> }
- { BUSDELAY=<counter> -d<counter> }
- { BURST=<tics> -b<tics> }
- { SHUFFLE=<tics> -s<tics> }
- { <page> <page> ... }
- { <file> <file> ... }
- VAR s: ^String[1000];
- len,i,j,k,ok,gelesen: Integer;
- name,colors: str80;
- is_job: Boolean;
- hail: p_WBStartup;
- arg: p_WBArg;
- olddir: BPTR;
- icon: p_DiskObject;
- entry: Str;
- FUNCTION is_space(ch: Char): Boolean;
- BEGIN is_space := (ch=' ') OR (ch=#9) OR (ch=#10) OR (ch=#13); END;
- BEGIN
- gelesen := 0;
- colors := '';
- IF fromWB THEN BEGIN { *** WorkBench-Start }
- OpenLib(IconBase,'icon.library',0);
- hail := StartupMessage;
- arg := hail^.sm_ArgList;
- FOR i := 1 to hail^.sm_NumArgs DO BEGIN
- olddir := CurrentDir(arg^.wa_Lock);
- name := arg^.wa_Name;
- IF i=1 THEN BEGIN { 1. Datei: das Programm selbst, ToolTypes checken }
- icon := GetDiskObject(name);
- IF icon<>Nil THEN BEGIN
- entry := FindToolType(icon^.do_ToolTypes, 'PALETTE');
- IF Ptr(entry)<>Nil THEN
- colors := entry;
- entry := FindToolType(icon^.do_ToolTypes, 'FILE');
- IF Ptr(entry)<>Nil THEN
- outputname := entry;
- entry := FindToolType(icon^.do_ToolTypes, 'ICONPATH');
- IF Ptr(entry)<>Nil THEN
- iconpath := entry;
- entry := FindToolType(icon^.do_ToolTypes, 'EDITOR');
- IF Ptr(entry)<>Nil THEN
- editor := entry;
- entry := FindToolType(icon^.do_ToolTypes, 'CONFIGPATH');
- IF Ptr(entry)<>Nil THEN
- configpath := entry;
- entry := FindToolType(icon^.do_ToolTypes, 'MAXWAIT');
- IF Ptr(entry)<>Nil THEN
- Val(entry,maxwait,ok);
- entry := FindToolType(icon^.do_ToolTypes, 'BUSDELAY');
- IF Ptr(entry)<>Nil THEN
- Val(entry,busdelay,ok);
- entry := FindToolType(icon^.do_ToolTypes, 'BURST');
- IF Ptr(entry)<>Nil THEN
- Val(entry,burst,ok);
- entry := FindToolType(icon^.do_ToolTypes, 'SHUFFLE');
- IF Ptr(entry)<>Nil THEN
- Val(entry,shuffle,ok);
- FreeDiskObject(icon);
- END;
- END ELSE BEGIN { zusätzliche Dateien: enthalten Seiten, einlesen }
- IF filetype(name)=1 THEN
- gelesen := gelesen + getpages(name);
- olddir := CurrentDir(olddir);
- END;
- { auf nächsten WBArg-Zeiger zugreifen: }
- arg := Ptr(Long(arg)+SizeOf(WBArg));
- END;
- CloseLib(IconBase);
- END ELSE IF ParameterLen>0 THEN BEGIN { *** CLI-Start }
- s := ParameterStr;
- len := ParameterLen;
- { Parameterzeile in Worte zerlegen, wie der argv[] in C es schon ist :-( }
- i := 1; WHILE i<=len DO BEGIN
- WHILE is_space(s^[i]) AND (i<len) DO Inc(i);
- j := i + 1;
- IF s^[i]='"' THEN BEGIN
- Inc(i); while (s^[j]<>'"') AND (j<=len) do Inc(j);
- END ELSE BEGIN
- while NOT is_space(s^[j]) AND (j<=len) do Inc(j);
- END;
- { Zeiger i: 1. Zeichen des Wortes, j: 1. Trennzeichen dahinter }
- IF s^[i]='-' THEN BEGIN
- i := i+2;
- CASE s^[i-1] OF
- 'f': BEGIN
- IF s^[i] = '=' THEN Inc(i);
- IF j>i THEN outputname := Copy(s^,i,j-i);
- END;
- 'i': BEGIN
- IF s^[i] = '=' THEN Inc(i);
- IF j>i THEN iconpath := Copy(s^,i,j-i);
- END;
- 'e': BEGIN
- IF s^[i] = '=' THEN Inc(i);
- IF j>i THEN editor := Copy(s^,i,j-i);
- END;
- 'c': BEGIN
- IF s^[i] = '=' THEN Inc(i);
- IF j>i THEN configpath := Copy(s^,i,j-i);
- END;
- 'p': colors := Copy(s^,i,j-i);
- 'd': Val(copy(s^,i,j-i),busdelay,ok);
- 'w': Val(copy(s^,i,j-i),maxwait,ok);
- 'b': Val(copy(s^,i,j-i),burst,ok);
- 's': Val(copy(s^,i,j-i),shuffle,ok);
- OTHERWISE BEGIN
- WriteLn('illegal parameter: ',Copy(s^,i,j-i));
- END;
- END;
- END ELSE BEGIN
- { Was nur aus '0123456789/*' besteht, ist eine Seitennummer, alles andere eine }
- { Eingabedatei. }
- is_job := True;
- FOR k := i TO j-1 DO
- IF NOT (s^[k] IN ['0'..'9','/','*','.','!']) THEN is_job := False;
- name := Copy(s^,i,j-i);
- IF is_job THEN
- add_job(name,True)
- ELSE IF filetype(name)=1 THEN
- gelesen := gelesen + getpages(name)
- ELSE
- WriteLn('no VT-pages found in file "',name,'"');
- END;
- i := j + 1;
- END;
- END;
- IF (queued=0) AND (gelesen=0) THEN
- add_job('100/*',True);
- IF editor<>'' THEN
- IF editor[Length(editor)]<>' ' THEN editor := editor + ' ';
- IF iconpath<>'' THEN
- IF NOT (iconpath[Length(iconpath)] IN [':','/']) THEN
- iconpath := iconpath + '/';
- IF configpath<>'' THEN
- IF NOT (configpath[Length(configpath)] IN [':','/']) THEN
- configpath := configpath + '/';
- IF colors<>'' THEN
- FOR i := 0 TO 7 DO
- palette[i] := hexval(Copy(colors,4*i+1,3));
- END;
-
- BEGIN { Initialisierung }
- END.
-